﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Transactions;
using LogicStudio.Framework.Auditoria;
using LogicStudio.Framework.Excepciones;

namespace Biciq.Datos
{
   public partial  class BiciqContexto
    {
        #region Métodos Públicos
        /// <summary>
        /// Sobrescribimos el método de aplicación de cambios para la implementación de la auditoria
        /// </summary>
        /// <param name="options">
        /// Opciones del almacenamiento
        /// </param>
        /// <returns>
        /// Un dato entero que indica el resultado de la aplicación de los cambios
        /// </returns>
        public override int SaveChanges(System.Data.Objects.SaveOptions options)
        {
            try
            {
                using (var trans = new TransactionScope())
                {
                    AuditoriaBase.MetodoAuditoria(this);
                    var resultado = base.SaveChanges(options);
                    trans.Complete();
                    return resultado;
                }
            }
            catch (Exception exception)
            {
                var mensaje = exception.InnerException != null ? exception.InnerException.Message : exception.Message;
                AuditoriaBase.MetodoAuditoria(mensaje);
                ControladorExcepciones.Procesar(exception, "Error al procesar auditoria ", false);
                throw;
            }
        }
        #endregion 
    }
}
